package com.wgh.pay.mapper;

import com.wgh.pay.entity.PayLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 支付日志Mapper接口
 */
public interface PayLogMapper extends BaseMapper<PayLog> {
    
    /**
     * 根据日期和支付方式查询支付日志
     * @param date 日期
     * @param payType 支付方式
     * @return 支付日志列表
     */
    List<PayLog> selectByDateAndType(@Param("date") Date date, @Param("payType") Integer payType);
    
    /**
     * 查询指定日期范围内的支付统计
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param payType 支付方式
     * @return 支付统计数据
     */
    Map<String, Object> selectPaymentStatistics(@Param("startDate") Date startDate, 
                                              @Param("endDate") Date endDate, 
                                              @Param("payType") Integer payType);
    
    /**
     * 批量插入支付日志
     * @param payLogs 支付日志列表
     * @return 插入记录数
     */
    int batchInsert(@Param("payLogs") List<PayLog> payLogs);
    
    /**
     * 根据参数查询支付日志列表
     * @param params 查询参数
     * @param offset 偏移量
     * @param limit 每页记录数
     * @return 支付日志列表
     */
    List<PayLog> selectByParams(@Param("params") Map<String, Object> params, 
                               @Param("offset") Integer offset, 
                               @Param("limit") Integer limit);
    
    /**
     * 根据参数统计支付日志数量
     * @param params 查询参数
     * @return 记录数量
     */
    int countByParams(@Param("params") Map<String, Object> params);
    
    /**
     * 根据订单ID查询支付日志
     * @param orderId 订单ID
     * @return 支付日志
     */
    PayLog selectByOrderId(@Param("orderId") Long orderId);
    
    /**
     * 根据交易流水号查询支付日志
     * @param transactionId 交易流水号
     * @return 支付日志
     */
    PayLog selectByTransactionId(@Param("transactionId") String transactionId);
    
    /**
     * 根据支付状态查询支付日志列表
     * @param payStatus 支付状态
     * @return 支付日志列表
     */
    List<PayLog> selectByPayStatus(@Param("payStatus") Integer payStatus);
    
    /**
     * 更新支付状态
     * @param id 支付日志ID
     * @param payStatus 支付状态
     * @param payTime 支付时间
     * @param channelTradeNo 支付渠道交易号
     * @return 更新行数
     */
    int updatePayStatus(@Param("id") Long id,
                      @Param("payStatus") Integer payStatus,
                      @Param("payTime") java.util.Date payTime,
                      @Param("channelTradeNo") String channelTradeNo);
    
    /**
     * 更新回调状态
     * @param id 支付日志ID
     * @param notifyStatus 回调状态
     * @param notifyTime 回调时间
     * @return 更新行数
     */
    int updateNotifyStatus(@Param("id") Long id,
                         @Param("notifyStatus") Integer notifyStatus,
                         @Param("notifyTime") java.util.Date notifyTime);
}